// 创建的每个 store 中都会添加一个名为 `secret` 的属性。
// 在安装此插件后，插件可以保存在不同的文件中
export function SecretPiniaPlugin() {
  // 给所有的仓库添加了一条全局属性
  return { secret: 'the cake is a lie' }
}

// 定义 store 时增加新的选项
export function myPiniaPlugin2(context) {
  //   console.log(context);
  const { store } = context;
  store.test = "this is a test";
}

/**
 * 给特定的仓库来扩展内容
 * @param {*} param0
 */
export function myPiniaPlugin3({ store }) {
  if (store.$id === "useCounterStore") {
    // 为当前 id 为 counter 的仓库来扩展属性
    return {
      name: "my name is pinia",
    };
  }
}

/**
 * 重置仓库状态
 */
export function myPiniaPlugin4({ store }) {
  // 我们首先可以将初始状态深拷贝一份
  const state = deepClone(store.$state);
  store.reset = () => {
    store.$patch(deepClone(state));
  };
}
/**
 * 写个深拷贝
 * @param {*} obj 
 */
function deepClone(obj) {
  if(typeof obj !== "object" || typeof obj == null) {
    return obj
  }
  const resolve = Array.isArray(obj) ? [] : {}
  for(const key in obj) {
    resolve[key] = deepClone(obj[key])
  }
  return resolve
}
